#! /bin/sh
# PCP QA Test No. 025
# pmcd reconnect and error propagation
#
# Copyright (c) 1995-2002 Silicon Graphics, Inc.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard filters
. ./common.product
. ./common.filter
. ./common.check

trap "_cleanup; rm -f $tmp.*; exit" 0 1 2 3 15

_stop_auto_restart pmcd
_stop_auto_restart pmlogger

use_systemd=''
if [ "$PCPQA_SYSTEMD" = yes ]
then
    use_systemd='-s'
    # these other services really get in the way and prevent a
    # clean pmlogger restart from src/pmcdgone
    #
    for svc in \
	pmlogger_check.timer pmlogger_check.service \
	pmlogger_daily.timer pmlogger_daily.service
    do
	case "$svc" in
	    *.timer)
		    ;;
	    *)
		    $sudo systemctl disable $svc >>$seq_full 2>&1
		    ;;
	esac
	$sudo systemctl stop $svc >>$seq_full 2>&1
	echo "+ after stop $svc ..." >>$seq_full
	_get_pids_by_name pmlogger >>$seq_full 2>&1
	$PCP_PS_PROG $PCP_PS_ALL_FLAGS | grep '[P]PID|/[p]mlogger( |$)' >>$seq_full
    done
    # and now get a clean pmlogger without the other hangers-on
    #
    $sudo systemctl restart pmlogger
    _wait_for_pmlogger || _exit 1
fi
echo "Using system? \"$use_systemd\" (-s => yes)" >>$seq_full

_cleanup()
{
    _restore_auto_restart pmcd
    _restore_auto_restart pmlogger
    if [ "X$use_systemd" = X-s ]
    then
	for svc in \
	    pmlogger_check.service \
	    pmlogger_daily.service \
	    pmlogger_daily-poll.service
	do
	    $sudo systemctl enable $svc >>$seq_full 2>&1
	    $sudo systemctl start $svc >>$seq_full 2>&1
	done
    fi
   # these come from src/pmcdgone running _wait_for_pmlogger w/out $tmp
   # being set ...
   #
   rm -f ._wait_for_pmlogger.host ._wait_for_pmlogger.pmlc
   # don't exit until pmlogger is running
   #
   _wait_for_pmlogger
}

# real QA test starts here
export tmp seq seq_full
$sudo src/pmcdgone $use_systemd 2>&1 \
| tee -a $seq_full \
| sed \
    -e '/^+ /d' \
    -e '/__pmGetPDU: fd=3 BINARY hdr: Broken pipe/d' \
    -e '/__pmGetPDU: fd=5 hdr read: len=-1: Bad file descriptor/d' \
    -e '/pmLookupDesc:/s/Connection reset by peer/IPC protocol failure/' \
    -e '/pmReconnectContext:/s/Operation/Connection/' \
| _filter_pcp_start
